/*
 * Superficie.cpp
 *
 *  Created on: 04/11/2012
 *      Author: Ignacio Galvez
 */
#include "Superficie.h"
#include "Punto.h"
#include <cmath>
#include <iostream>
#define ALFA_1 1.249
#define ALFA_3 1.892


Superficie::Superficie() {}

Superficie::Superficie(int  cantidadIntervalos, double altura) {
double auxiliar = (double) cantidadIntervalos;
longitudIntervalos = longitudSuperficie / auxiliar;
double longitud = longitudIntervalos;
Punto* punto = NULL;

for (int i = 0; i < cantidadIntervalos; ++i) {
	double x0 = ALFA_1 * longitudIntervalos / 2 * M_PI;
	double x1 = longitud / 4.0;
 	double x2 = ALFA_3 * longitudIntervalos / 2 * M_PI;
 	double y0 = altura + pow(sin(ALFA_1), 2);
 	double y1 = altura + pow(sin(M_PI_2), 2);
 	double y2 = altura + pow(sin(ALFA_3), 2);
 	punto = new Punto(x0, y0);
 	puntos[x0] = punto;
 	punto = new Punto(x1, y1);
 	puntos[x1] = punto;
 	punto = new Punto(x2, y2);
 	puntos[x2] = punto;
 	longitud += longitudIntervalos;
}

}

double Superficie::longitudSuperficie = 1000;

bool Superficie::recibirImpacto(double x, double y) {
	std::map<double , Punto*>::iterator it;
	double Ycritico;
	Punto *punto1,*punto2;
	it = puntos.begin();
	while ((it != puntos.end())&&((it->second->getPosicionX()) <= x)) {
		++it;
	}
	punto2 = it->second;
	--it;
	punto1 = it->second;
	Ycritico = (punto2->getPosicionY() - punto1->getPosicionY())/
	(punto2->getPosicionX() - punto1->getPosicionX()) * 
	(x - punto1->getPosicionX()) + punto1->getPosicionY();
	return Ycritico >= y;
}



 Superficie::~Superficie() {}


